package com.zxjbyte.yiyi.framework.web.context.annotation;

import com.zxjbyte.yiyi.framework.web.context.CryptoAlgorithm;
import com.zxjbyte.yiyi.framework.web.context.CryptoMode;
import lombok.AllArgsConstructor;

import java.lang.annotation.*;

/**
 * 加解密控制注解
 * 用于标记接口是否需要请求解密和响应加密
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiCrypto {

    /**
     * 加解密模式
     */
    ApiCryptoMode mode() default ApiCryptoMode.ALL;

    /**
     * 加解密算法类型
     * 默认AES算法
     */
    CryptoAlgorithm algorithm() default CryptoAlgorithm.AES;

    /**
     * 接口加密模式
     */
    @AllArgsConstructor
    public static enum ApiCryptoMode implements CryptoMode {
        /**
         * 不进行任何加解密
         */
        NONE(CODE_NONE, "不进行任何加解密操作"),
        /**
         * 仅请求解密
         */
        REQUEST_ONLY(CODE_REQUEST_ONLY, "只对请求进行解密，响应不加密"),
        /**
         * 仅响应加密
         */
        RESPONSE_ONLY(CODE_RESPONSE_ONLY, "只对响应进行加密，请求不解密"),
        /**
         * 请求解密和响应加密
         */
        ALL(CODE_ALL,"请求解密和响应加密都开启");

        private final String code;
        private final String description;

        @Override
        public String getCode() {
            return code;
        }

        @Override
        public String getDescription() {
            return description;
        }
    }

}
